package com.yaya.common.param;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 请求参数
 */
@Data
public class RequestParam<T> {
  /**
   * 加密信息
   */
  private Crypto crypto;
  /**
   * 分页信息
   */
  private Page page;
  /**
   * 排序信息
   */
  private List<Order> orders;
  /**
   * 请求数据
   */
  private T data;

  /**
   * 加密信息
   * 
   * @author m
   *
   */
  @Data
  public class Crypto {
    /**
     * 是否加密
     */
    private Boolean encrypt;
    /**
     * 加密密文
     */
    private String cipher;
  }

  /**
   * 分页信息
   * 
   * @author m
   *
   */
  @Data
  public class Page {
    /**
     * 页面大小
     */
    private Long size;
    /**
     * 当前页面
     */
    private Long current;
  }

  /**
   * 排序信息
   * 
   * @author m
   */
  @Data
  public static class Order {
    /**
     * 纵列名称
     */
    private String column;
    /**
     * 是否升序
     */
    private Boolean asc;
  }

  /**
   * 构建 MyBatisPlus 分页对象
   * 
   * @param <E> 实体泛型
   * @return MyBatisPlus 分页对象
   */
  public <E> com.baomidou.mybatisplus.extension.plugins.pagination.Page<E> buildPage() {
    com.baomidou.mybatisplus.extension.plugins.pagination.Page<E> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<E>();
    // 设置分页信息
    page.setSize(this.page.getSize() == null ? 20L : this.page.getSize());
    page.setCurrent(this.page.getCurrent() == null ? 1L : this.page.getCurrent());
    // 设置排序信息
    List<OrderItem> orders = new ArrayList<OrderItem>();
    if (this.orders == null) {
      orders.add(new OrderItem("order_number", true));
      orders.add(new OrderItem("insert_time", false));
    } else {
      for (Order order : this.orders) {
        orders.add(new OrderItem(order.getColumn(), order.getAsc()));
      }
    }
    page.setOrders(orders);
    // 返回结果
    return page;
  }
}
